package com.boot2.core.model;

import com.boot2.core.LongBaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

import javax.persistence.Entity;
import javax.persistence.Index;
import javax.persistence.Table;
import java.util.Date;

/**
 * @ClassName: SchedulerTaskLog
 * @Description: 【定时任务执行日志】 model
 * @author zhangweilin
 * @date 2020-9-30 10:32:34
 *
 */
@ApiModel("定时任务执行日志")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString(callSuper = true)
@Entity
@Table(name = "scheduler_task_log",indexes = {@Index(columnList = "createTime"),@Index(columnList = "updateTime")})
@SQLDelete(sql = "update scheduler_task_log set is_deleted = id where id = ?")
@Where(clause = "is_deleted = 0 or is_deleted is null ")
@DynamicInsert // 加上此注解，可以只添加有值的字段
@DynamicUpdate // 此注解，是指，会先查，然后跟参数对比，不一样的就更新，所以并不是有值更新，如果db中有值，参数里没值，那么db中的值会清空
public class SchedulerTaskLog extends LongBaseEntity {

	public SchedulerTaskLog(Long id) {
		this.id = id;
	}

	/**
	 *  @param isInit  是否初始化基础信息
	 */
	public SchedulerTaskLog(boolean isInit) {
		super(isInit);
	}
	/**
	 * 定时任务id
	 */
	@ApiModelProperty(value = "定时任务id")
	private Long schedulerTaskId;
	/**
	 * 执行的表达式，与scheduler_task表中的冗余
	 */
	@ApiModelProperty(value = "执行的表达式，与scheduler_task表中的冗余")
	private String cronExpression;
	/**
	 * 触发时间
	 */
	@ApiModelProperty(value = "触发时间")
	private Date fireTime;
	/**
	 * 备注
	 */
	@ApiModelProperty(value = "备注")
	private String remark;
	/**
	 * 关联的业务id, 一般为bigint,但是兼容可能字符串类型的主键
	 */
	@ApiModelProperty(value = "关联的业务id, 一般为bigint,但是兼容可能字符串类型的主键")
	private String bussinessId;
	/**
	 * --
	 */
	@ApiModelProperty(value = "--")
	private String code;
	/**
	 * 调度id
	 */
	@ApiModelProperty(value = "调度id")
	private String fireInstanceId;
	/**
	 * 完成时间
	 */
	@ApiModelProperty(value = "完成时间")
	private Date endTime;
	/**
	 * job花费的时间，会与end_time-fire_time近似
	 */
	@ApiModelProperty(value = "job花费的时间，会与end_time-fire_time近似")
	private Long jobRunTime;

	/**
	 * 1: 开始执行 2:拒绝执行  3:执行结束
	 */
	@ApiModelProperty(value = "1: 开始执行 2:拒绝执行  3:成功执行结束 4:执行异常")
	private int action;

	/**
	 * 异常信息
	 */
	@ApiModelProperty(value = "异常信息")
	private String exceptionMessage;
}
